home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 143 / Gekkan Dennou Club - 2000.4 Vol. 143 (Japan).7z / Gekkan Dennou Club - 2000.4 Vol. 143 (Japan).bin / ikap / grp1 / smp2 / structs.inc < prev    next >
Text File  |  1999-12-26  |  5KB  |  158 lines

  1. /*
  2.     構造体
  3. */
  4.  
  5. #define        RAD    (3.141592/180)
  6.  
  7. typedef    int    FIX32;        //(1,15,16)
  8.  
  9. #define        hshort(adr)    (*(short *)&(adr))        //上位16ビット
  10. #define        hushort(adr)    (*(unsigned short *)&(adr))    //
  11.  
  12.  
  13.  
  14.  
  15. //---------------------------------------------------------------------- SyncMan()
  16. /*
  17.     スプライトVRAMおよびパレット固定(システム未管理)前提ドライバ
  18. */
  19. typedef    struct    {
  20.     short    ox,oy;        //基準座標(前のスプライト)からのオフセット
  21.     unsigned short    patnum;        //パターン番号(パレット、反転アトリビュートを含む)
  22. } SPLINK;            //一枚あたりのスプライト情報
  23.  
  24. typedef    struct    {
  25.     unsigned short    chips;    //何枚のチップを使用するか?(大抵1枚)
  26.     SPLINK    splink[0];    //スプライトリンク情報そのものの羅列
  27. } SPINFO1;            //スプライト情報
  28.  
  29. typedef    struct    {
  30.     int    max_anim;    //全アニメパターン数(コンパイラをだます関係上、必ずintを指定)
  31.     SPINFO1    *anim_info[0];    //アニメコマ情報アドレスの羅列
  32. } SPINFO;            //ゼロ配列はXCで使えないはず
  33.  
  34. /*    ゼロ配列を持ちいた構造体の初期値付き宣言がどうも行かない様子。
  35.     よって、データはあらかじめべたメモリイメージで持たせておき、
  36.     あとで、構造体にばかしてやる(あまりスマートではないな)
  37.  
  38.     E1RR:    (=ID)一面で回転しながら飛んでくる赤い奴のばやい
  39.     6    アニメ数
  40.     E1RR00    0番目のSPINFO
  41.     E1RR01    1番目のSPINFO
  42.         :
  43.     E1RR05    5番目のSPINFO
  44.     な感じ
  45.  
  46.     VH00 PPPP XXXX XXXX:
  47.     X:パターン番号
  48.     P:パレット番号
  49.     VH:反転フラグ
  50. */
  51.  
  52.  
  53. //---------------------------------------------------------------------- DevMan()
  54. typedef    struct    {
  55.     int    kb[0x10];
  56.     int    mbl,mbr,mx,my,mdx,mdy;
  57.     int    stick,strigA,strigB;
  58. } DEVICE;
  59.  
  60.  
  61.  
  62.  
  63. //---------------------------------------------------------------------- TaskMan()
  64. //タスクコマンド
  65. #define        TC_NON        (0)
  66. #define        TC_HIT_ITEM    (1)    //正のコードは良いコード:アイテムのコード等
  67. #define        TC_HIT_ENEMY    (-1)    //敵にあたった:負のコードは悪いコード
  68. #define        TC_HIT_SHOT    (-2)    //弾に
  69. #define        TC_HIT_PLAYER    (-3)    //プレイヤーに
  70.  
  71. //タスクコマンドは-8~+7をリザーブにするか?
  72.  
  73.  
  74.  
  75.  
  76. /*
  77.     汎用キャラクタータスク
  78. */
  79. typedef    struct    {
  80.  
  81.     //基本的にドライバしか値を操作出来ないもの
  82.     int    *func_addr;        //タスク実行アドレス
  83.     unsigned short    delay_timer;    //タスク本体が確保されてから最初に起動するまでの遅延時間(通常0):こいつがあるいちはlocal_counterはすすまない
  84.     char    local_step;        //自分の状態(利用方法は各タスク毎に違う:こいつは各自で管理)
  85.     char    task_command;        //外部からのコマンド(Hitchk等)
  86.     int    local_counter;        //これまでにTaskManから呼出された回数
  87.     int    *hit_addr;        //衝突した相手のタスクのアドレス:本当はTASK *hit_addr
  88. //タスク情報↑+16()
  89.  
  90.     SPINFO    *disp0_addr;        //キャラクタ情報アドレス
  91.     FIX32    disp0_x,disp0_y;    //キャラクタ表示位置(小数点を持たせるべきか?)
  92.     unsigned short    disp0_anim;    //アニメ番号(数値を間違えるとすぐにバスる!)
  93.     unsigned char    disp0_palet;    //デフォルト外パレット
  94.     unsigned char    disp0_pri;    //プライオリティ(0~7):現在未使用
  95. //表示情報↑+16
  96.  
  97.     char    hit_x0,hit_y0,hit_x1,hit_y1;//あたり判定オフセット
  98. //あたり判定↑+4
  99.  
  100.     short    work[14];        //汎用ワーク
  101. //汎用ワーク↑+28
  102. } TASK;
  103.  
  104. /*現在:64byte/TASK
  105. ↑できるだけサイズを小さくすることが重要
  106.  汎用系の処理もタスクプログラム側にまかせるのを基本とする。
  107.  例:敵弾の移動ベクトルや当たりサイズの設定等
  108. */
  109.  
  110.  
  111.  
  112.  
  113. /*
  114.     あたりサイズ1ドットの敵弾専用タスク
  115. */
  116. typedef    struct    {
  117.     int    *func_addr;        //タスク実行アドレス(アニメ処理をやらす為)
  118.     unsigned short    delay_timer;    //タスク本体が確保されてから最初に起動するまでの遅延時間(通常0)
  119.     int    local_counter;        //これまでの呼出回数
  120. //タスク情報↑+10
  121.     SPINFO    *disp0_addr;        //キャラクタ情報アドレス一応いるか?
  122.     FIX32    disp0_x,disp0_y;    //キャラクタ表示位置
  123.     FIX32    disp0_vx,disp0_vy;    //移動量
  124.     unsigned short    disp0_anim;    //アニメ番号(数値を間違えるとすぐにバスる!)
  125. //表示情報↑+22
  126.     char    local_step;        //自分の状態(利用方法は各タスク毎に違う)
  127.     char    task_command;
  128. //+2
  129.     short    work[7];        //半分アライメント用ワーク
  130. //+14
  131. } ESTASK;    //total:48byte
  132.  
  133.  
  134.  
  135. /*
  136.     自機弾
  137. */
  138. typedef    struct    {
  139.     int    *func_addr;        //タスク実行アドレス
  140.     SPINFO    *disp0_addr;        //キャラクタ情報アドレス
  141.     FIX32    disp0_x,disp0_y;    //キャラクタ表示位置(小数点を持たせるべきか?)
  142.     FIX32    disp0_vx,disp0_vy;    //移動量(基本的にまっすぐ飛ぶだけだからvxはいらない?)
  143.     unsigned short    disp0_anim;    //アニメ番号(数値を間違えるとすぐにバスる!)
  144.     char    local_step;        //自分の状態(利用方法は各タスク毎に違う)
  145.     char    task_command;
  146.     short    work[2];        //
  147. } PSTASK;    //total:32byte
  148.  
  149.  
  150.  
  151. #define        MAX_ETASK    (12)    //登録可能な敵の数
  152. #define        MAX_MTASK    (8)    //     管理タスクの数
  153. #define        MAX_ITASK    (32)    //     アイテムの数*2
  154. #define        MAX_ESTASK    (48)    //     敵弾の数
  155. #define        MAX_PSTASK    (12)    //     自機弾の数
  156.  
  157.  
  158.